home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 January / macformat-020.iso / Shareware City / Developers / CW Examples / lib / arg_utl.c next >
Encoding:
C/C++ Source or Header  |  1994-08-17  |  2.9 KB  |  126 lines  |  [TEXT/KAHL]

  1. /* ========================================
  2.  
  3.     arg_utl.c
  4.     
  5.     Copyright (c) 1993,1994 Newport Software Development
  6.     
  7.     You may distribute unmodified copies of this file for
  8.     noncommercial purposes.  You may use this file as a
  9.     reference when writing your own nShell(tm) commands.
  10.     
  11.     All other rights are reserved.
  12.     
  13.    ======================================== */
  14.    
  15. #include "nshc.h"
  16.                     
  17. #include "str_utl.proto.h"
  18. #include "arg_utl.proto.h"
  19.  
  20. // ===== argument converson routines =====
  21.  
  22. // assuming the argv has been checked as numeric
  23.         
  24. long arg_to_int(t_nshc_parms *nshc_parms, int arg)
  25. {
  26.     char    c;
  27.     char    *p;
  28.     long    total = 0;
  29.     
  30.     p = &nshc_parms->arg_buf[nshc_parms->argv[arg]];
  31.     
  32.     while (c = *p++) {
  33.         total *= 10;
  34.         total += (c - '0');
  35.         }
  36.         
  37.     return( total );
  38. }
  39.  
  40. int arg_to_str( t_nshc_parms *nshc_parms, t_nshc_calls *nshc_calls, int arg, Str255 string )
  41. {
  42.     char    *app_name;
  43.     char    *arg_str;
  44.     int        result;
  45.     
  46.     result = NSHC_NO_ERR;
  47.     
  48.     arg_str = &nshc_parms->arg_buf[nshc_parms->argv[arg]];
  49.         
  50.     if ( cStrLen( arg_str ) > 255 ) {
  51.         app_name = &nshc_parms->arg_buf[nshc_parms->argv[0]];
  52.         nshc_calls->NSH_puts_err(app_name);
  53.         nshc_calls->NSH_putStr_err("\p: Pathname is too long = ");
  54.         nshc_calls->NSH_puts_err(arg_str);
  55.         nshc_calls->NSH_putchar_err('\r');
  56.         result = NSHC_ERR_PARMS;
  57.         }
  58.     else
  59.         pStrFromC( string, arg_str );
  60.             
  61.     return( result );
  62. }
  63.  
  64. int arg_fss_utl( t_nshc_parms *nshc_parms, t_nshc_calls *nshc_calls, int arg, FSSpec *spec )
  65. {
  66.     char    *app_name;
  67.     char    *arg_str;
  68.     int        result;
  69.     Str255    pathname;
  70.         
  71.     result = NSHC_ERR_PARMS;
  72.     
  73.     arg_str = &nshc_parms->arg_buf[nshc_parms->argv[arg]];
  74.         
  75.     if ( cStrLen( arg_str ) > 255 ) {
  76.         nshc_calls->NSH_puts_err(&nshc_parms->arg_buf[nshc_parms->argv[0]]);
  77.         nshc_calls->NSH_putStr_err("\p: Pathname is too long = ");
  78.         nshc_calls->NSH_puts_err(arg_str);
  79.         nshc_calls->NSH_putchar_err('\r');
  80.         }
  81.     else {
  82.         pStrFromC( pathname, arg_str );
  83.         if (!nshc_calls->NSH_path_expand( pathname ))
  84.             result = nshc_calls->NSH_path_to_FSSpec( pathname, spec );
  85.         }
  86.             
  87.     return( result );
  88. }
  89.  
  90. int arg_to_fss( t_nshc_parms *nshc_parms, t_nshc_calls *nshc_calls, int arg, FSSpec *spec )
  91. {
  92.     int        result;
  93.     
  94.     result = arg_fss_utl(nshc_parms, nshc_calls, arg, spec );
  95.     
  96.     if ( ( result == noErr ) || ( result == fnfErr ) )
  97.         result = NSHC_NO_ERR;
  98.                 
  99.     if (result) {
  100.         nshc_calls->NSH_puts_err(&nshc_parms->arg_buf[nshc_parms->argv[0]]);
  101.         nshc_calls->NSH_putStr_err("\p: Bad pathname = ");
  102.         nshc_calls->NSH_puts_err(&nshc_parms->arg_buf[nshc_parms->argv[arg]]);
  103.         nshc_calls->NSH_putchar_err('\r');
  104.         }
  105.         
  106.     return( result );
  107. }
  108.  
  109. int arg_to_real_fss( t_nshc_parms *nshc_parms, t_nshc_calls *nshc_calls, int arg, FSSpec *spec )
  110. {
  111.     int        result;
  112.     
  113.     result = arg_fss_utl(nshc_parms, nshc_calls, arg, spec );
  114.     
  115.     if (result) {
  116.         nshc_calls->NSH_puts_err(&nshc_parms->arg_buf[nshc_parms->argv[0]]);
  117.         nshc_calls->NSH_putStr_err("\p: Bad pathname = ");
  118.         nshc_calls->NSH_puts_err(&nshc_parms->arg_buf[nshc_parms->argv[arg]]);
  119.         nshc_calls->NSH_putchar_err('\r');
  120.         }
  121.         
  122.     return( result );
  123. }
  124.  
  125.  
  126.